package com.link_with_health.service;

import com.link_with_health.exception.BaseException;
import com.link_with_health.model.AdminDivisionEntity;
import com.link_with_health.model.HospitalEntity;
import com.link_with_health.model.HospitalGradeEntity;

import java.util.List;

public interface HospitalService {

    /**
     * 通过医院id获取医院信息
     * @param id 医院id
     * @return 医院信息
     * @throws BaseException 异常
     */
    HospitalEntity getHospitalsById(Long id) throws BaseException;

    /**
     * 通过医生id获取医院信息
     * @param id 医生id
     * @return 医院信息
     * @throws BaseException 异常
     */
    HospitalEntity getHospitalsByDoctorId(Long id) throws BaseException;

    /**
     * 通过名字获取医院信息 支持模糊查找
     * @param name 医院名字
     * @return 医院信息
     * @throws BaseException 异常
     */
    List<HospitalEntity> getHospitalsByName(String name) throws BaseException;

    /**
     * 通过地区id获取医院信息 精确到区/县
     * @param divisionId 地区id
     * @return 医院信息
     * @throws BaseException 异常
     */
    List<HospitalEntity> getHospitalsByExactArea(int divisionId) throws BaseException;

    /**
     * 通过地区id获取医院信息 模糊地区
     * @param divisionId 地区id
     * @return 医院信息
     * @throws BaseException
     */
    List<HospitalEntity> getHospitalsByWideArea(int divisionId) throws BaseException;

    /**
     * 通过医院等级获取医院信息
     * @param grade 等级
     * @return  医院信息
     * @throws BaseException
     */
    List<HospitalEntity> getHospitalsByGrade(int grade) throws BaseException;

    /**
     * 获取所有医院信息
     * @return  医院信息
     * @throws BaseException 异常
     */
    List<HospitalEntity> getAllHospitals() throws BaseException;

    /**
     *  添加医院信息
     * @param hospital 医院信息
     * @return  改动数量
     * @throws BaseException 异常
     */
    int addHospitals(HospitalEntity hospital) throws BaseException;

    /**
     * 修改医院信息
     * @param hospital 医院信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int changeHospitals(HospitalEntity hospital) throws BaseException;

    /**
     * 删除医院信息
     * @param id 医院id
     * @return 改动数量
     * @throws BaseException 异常
     */
    int deleteHospitals(Long id) throws BaseException;

    /**
     * 通过地区id获取地区信息
     * @param divisionId 地区id
     * @return 地区信息
     * @throws BaseException 异常
     */
    AdminDivisionEntity getAdminDivisionById(int divisionId) throws BaseException;

    /**
     * 通过省份id获取 地区信息
     * @param province 省份id
     * @return  地区信息
     * @throws BaseException 异常
     */
    List<AdminDivisionEntity> getAdminDivisionByProvince(Integer province) throws BaseException;

    /**
     * 通过城市id获取 区/县级地区信息
     * @param city 城市id
     * @return  地区信息
     * @throws BaseException 异常
     */
    List<AdminDivisionEntity> getAdminDivisionByCity(Integer city) throws BaseException;

    /**
     * 获取所有省级地区信息 含直辖市
     * @return  地区信息
     * @throws BaseException 异常
     */
    List<AdminDivisionEntity> getAllProvince() throws BaseException;

    /**
     * 获取所有省级地区信息 含直辖市
     * @return  地区信息
     * @throws BaseException 异常
     */
    List<AdminDivisionEntity> getAllAdminDivision() throws BaseException;

    /**
     * 通过地区id获取地区完整名字
     * @param divisionId 地区id
     * @return 完整名字
     * @throws BaseException 异常
     */
    String getDivisionName(int divisionId) throws BaseException;

    /**
     * 修改地区信息
     * @param adminDivision 地区信息
     * @return 改动数量
     * @throws BaseException
     */
    int changeAdminDivision(AdminDivisionEntity adminDivision) throws BaseException;

    /**
     * 添加地区信息
     * @param adminDivision 地区信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int addAdminDivision(AdminDivisionEntity adminDivision) throws BaseException;

    /**
     * 删除地区信息
     * @param id 地区id
     * @return  地区信息
     * @throws BaseException 异常
     */
    int deleteAdminDivisionById(int id) throws BaseException;


    /**
     * 通过等级id获取等级信息
     * @param gradeId 等级id
     * @return 等级信息
     * @throws BaseException 异常
     */
    HospitalGradeEntity getGradeById(Integer gradeId) throws BaseException;

    /**
     * 通过等级名字获取等级信息
     * @param gradeName 等级名字
     * @return 登记信息
     * @throws BaseException 异常
     */
    List<HospitalGradeEntity> getGradeByName(String gradeName) throws BaseException;

    /**
     * 获取所有等级信息
     * @return 等级信息
     * @throws BaseException 异常
     */
    List<HospitalGradeEntity> getAllGrade()throws BaseException;

    /**
     * 增加等级信息
     * @param grade 登记信息
     * @return 改动数量
     * @throws BaseException 异常
     */
    int addGrade(HospitalGradeEntity grade) throws BaseException;

    /**
     * 增加等级信息
     * @param grade 登记信息
     * @return 等级信息
     * @throws BaseException 异常
     */
    int changeGrade(HospitalGradeEntity grade) throws BaseException;

    int deleteGrade(int id) throws BaseException;

}
